/**
 * https://www.luogu.com.cn/problem/P1217
 * 回文质数
 */
#include <iostream>
#include <vector>
using namespace std;

int a, b;

// 判断一个数是否为质数
bool isPrime(int num) {
    if (num < 2) return false;
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

// 递归生成回文数并判断其是否为质数
void generate(size_t lhs, vector<int>& bits) {
    // 如果lhs到达bits的一半位置，则生成数字并判断
    if (lhs >= (bits.size() + 1) / 2) {
        int num = 0;
        // 将bits向量转换为数字
        for (int i : bits) {
            num *= 10;
            num += i;
        }
        // 判断生成的数字是否为质数且在范围a到b内
        if (isPrime(num) && num >= a && num <= b) {
            cout << num << endl;
        }
        return;
    }

    // 递归生成回文数
    for (int i = 0; i <= 9; i++) {
        if (lhs == 0 && i == 0) continue; // 忽略以0开头的数字
        if (lhs == 0 && i % 2 == 0) continue; // 忽略以偶数开头结尾的数字
        bits.at(lhs) = i;
        bits.at(bits.size() - 1 - lhs) = i;
        generate(lhs + 1, bits);
    }
}

// 获取数字的位数
size_t getBits(int num) {
    size_t i = 0;
    while (num != 0) {
        i++;
        num /= 10;
    }
    return i;
}

int main() {
    cin >> a >> b;
    size_t lhs = getBits(a); // 获取a的位数
    size_t rhs = getBits(b); // 获取b的位数

    // 特殊处理2这个质数
    if (a <= 2) {
        cout << 2 << endl;
    }

    // 遍历每个可能的位数
    for (size_t i = lhs; i <= rhs; i++) {
        if (i % 2 == 0) {
            // 如果位数是偶数，则跳过，因为回文质数的位数一般为奇数，除非是11
            if (i == 2 && a <= 11) {
                cout << 11 << endl;
            }
            continue;
        }
        // 初始化一个大小为i的向量
        vector<int> a(i);
        // 生成并输出回文质数
        generate(0, a);
    }
}
